/**
 * 工具类
 */
const baseURL = process.env.VUE_APP_BASE_API

/**
 * 通用下载方法
 * @param fileName
 */
export function download(fileName) {
  window.location.href = baseURL + '/common/download?fileName=' + encodeURI(fileName) + '&delete=' + true
}

// ===构造树型结构数据：begin↓↓  ↓↓  ↓↓  ↓↓  ↓↓  ↓↓  ↓↓  ↓↓  ↓↓  ↓↓  ↓↓  ↓↓  ↓↓  ↓↓  ↓↓  ↓↓  ↓↓  ↓↓  ↓↓  ↓↓  ↓↓
/**
 * 方法：1
 * 平通扁平化格式数据 转换成 属性对象
 * @param list
 * @param name = {parentId: '', id: ''}
 */
export function buildTree(list, name) {
  const pidStr = name.parentId
  const idStr = name.id
  const childrenStr = 'children'

  const listOjb = {} // 用来储存{key: obj}格式的对象
  const treeList = [] // 用来储存最终树形结构数据的数组

  // 将数据变换成{key: obj}格式，方便下面处理数据
  for (let i = 0; i < list.length; i++) {
    listOjb[list[i][idStr]] = list[i]
  }

  for (let j = 0; j < list.length; j++) {
    // 判断父级是否存在
    const haveParent = listOjb[list[j][pidStr]]
    if (haveParent) {
      // 如果有没有父级children字段，就创建一个children字段
      !haveParent[childrenStr] && (haveParent[childrenStr] = [])
      // 在父级里插入子项
      haveParent[childrenStr].push(list[j])
    } else {
      // 如果没有父级直接插入到最外层
      treeList.push(list[j])
    }
  }
  return treeList
}

/**
 * 方法：2
 * 树形数据未每项添加序号（下标）
 * @param list
 * 用于自定树形结构，点击事件判断条件，比如点击 二级树的第二个 触发事件，以此参数（currentTreeIndex）作为判断
 */
export function insertTreeIndex(list) {
  list.map((item,index) =>{
    item.currentTreeIndex = index
    if(item.children){
      insertTreeIndex(item.children)
    }
  })
  return list
}

// ==时间操作工具：begin↓↓  ↓↓  ↓↓  ↓↓  ↓↓  ↓↓  ↓↓  ↓↓  ↓↓  ↓↓  ↓↓  ↓↓  ↓↓  ↓↓  ↓↓  ↓↓  ↓↓  ↓↓  ↓↓  ↓↓  ↓↓  ↓↓
/**
 * 选择时间范围
 * @param type: 距离当前时间 多少天
 */
export function calcPreDate(type) {
  const fmt = 'yyyy-MM-dd hh:mm:ss'
  const start = new Date()
  const end = new Date()
  if (type === 1) {
    start.setHours(0)
    start.setMinutes(0)
    start.setSeconds(0)
    // start.setMilliseconds(0)
  } else {
    start.setTime(start.getTime() - 3600 * 1000 * 24 * type)
  }
  return {
    'start': dateFormat(fmt, new Date(start)),
    'end': dateFormat(fmt, new Date(end))
  }
}

/**
 * 时间格式转化:1
 * @param fmt：时间格式
 * @param date
 * @returns {*}
 */
export function dateFormat(fmt, date) {
  let ret
  const opt = {
    'y+': date.getFullYear().toString(), // 年
    'M+': (date.getMonth() + 1).toString(), // 月
    'd+': date.getDate().toString(), // 日
    'h+': date.getHours().toString(), // 时
    'm+': date.getMinutes().toString(), // 分
    's+': date.getSeconds().toString() // 秒
    // 有其他格式化字符需求可以继续添加，必须转化成字符串
  }
  for (const k in opt) {
    ret = new RegExp('(' + k + ')').exec(fmt)
    if (ret) {
      fmt = fmt.replace(ret[1], (ret[1].length === 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, '0')))
    }
  }
  return fmt
}

/**
 * 日期格式化:2
 *
 * */
export function parseTime(time, pattern) {
  if (arguments.length === 0 || !time) {
    return null
  }
  const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}'
  let date
  if (typeof time === 'object') {
    date = time
  } else {
    if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
      time = parseInt(time)
    } else if (typeof time === 'string') {
      time = time.replace(new RegExp(/-/gm), '/')
    }
    if ((typeof time === 'number') && (time.toString().length === 10)) {
      time = time * 1000
    }
    date = new Date(time)
  }
  const formatObj = {
    y: date.getFullYear(),
    m: date.getMonth() + 1,
    d: date.getDate(),
    h: date.getHours(),
    i: date.getMinutes(),
    s: date.getSeconds(),
    a: date.getDay()
  }
  const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
    let value = formatObj[key]
    // Note: getDay() returns 0 on Sunday
    if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] }
    if (result.length > 0 && value < 10) {
      value = '0' + value
    }
    return value || 0
  })
  return time_str
}
export function getTestServerHost() {
    return process.env.NODE_ENV == 'development' ? process.env["VUE_APP_BASE_HOST"] + process.env["VUE_APP_BASE_API"] : process.env["VUE_APP_BASE_API"];
}
// ==时间操作工具：end↑↑  ↑↑  ↑↑  ↑↑  ↑↑  ↑↑  ↑↑  ↑↑  ↑↑  ↑↑  ↑↑  ↑↑  ↑↑  ↑↑  ↑↑  ↑↑  ↑↑  ↑↑  ↑↑  ↑↑  ↑↑  ↑↑  ↑
